In a remote presentation session, a client computer and a server computer communicate across a communications network. The client sends the server locally-received input, such as mouse cursor movements and keyboard presses. In turn, the server receives this input and performs processing associated with it, such as executing an application in a user session. When the server performs processing that produces output, such as graphical output or sound, the server sends this output to the client for presentation. In this manner, applications appear to a user of the client to execute locally on the client when they, in fact, execute on the server.
In a remote presentation session, the amount of graphical data generated by a server commonly exceeds the amount of communications network bandwidth between the server and the client. In view of this restriction of bandwidth, it is common for the server to compress the graphical data before transmitting it to the client. Sometimes the server will generate a byte stream to send to the client and then compress the byte stream before sending it to the client. This compression of the byte stream is frequently referred to as “bulk compression.” There are many problems with current implementations of bulk compressors, some of which are well known.